<?php

/**
* 
*/
class BiereNoteController extends Controller
{

  /**
   * Charge les listes d'infos à la construction
   */
  function __construct()
  {
    parent::__construct();
    array_push($this->styles, 'asset/css/app.css');
    array_push($this->styles, 'http://fonts.googleapis.com/css?family=Pirata+One');
    array_push($this->styles, 'http://fonts.googleapis.com/css?family=Raleway');
  }

  /**
   * Méthode appellé lorsque la page /?controller=note&action=ajouterNote est lancée
   */
  function ajouterNoteAction()
  {
    // Si le fichier xml contenant les notes n'est pas présent pour s'il n'a pas des permissions d'écriture on affiche une erreur. 
    if(!file_exists(Config::$urlNotes) || !is_writable(Config::$urlNotes)){
      Notification::addMessage(Notification::ERROR, "Le fichier contenant les notes n'à pas les permissions d'écriture.");

    // Sinon si la note et l'identifiant de la biere existent, on l'enregistre.
    } else if(isset($_GET['idBiere']) && $_GET['idBiere'] != "" && isset($_GET['note']) && $_GET['note'] != "") {

        // Si l'utilisateur à déjà voté, annulation et affichage d'un message d'info
        if($this->hasAlreadyVoted($_GET['idBiere'])) {
          Notification::addMessage(Notification::INFO, "Vous avez déjà voté pour cette bière.");
        }
        // Sinon on enregistre la note
        else {

          // Instantication du modèle
          $note = new Note();

          // Ajout de la note en mémoire
          $note->addNote($_GET['idBiere'], $_GET['note']);

          // Enregistrement de la note dans le fichier xml
          $note->save(Config::$urlNotes);

          // Ajout de la note dans la session pour ne pas pouvoir voter 2 fois pour la meme biere
          $this->ajouterVoteALaSession( $_GET['idBiere'] );

          // Ajout d'un message de notification en cas de réussite de l'enregistrement
          Notification::addMessage(Notification::SUCCESS, "Votre note " . $_GET['note'] . " a été prise en compte. Merci");
        }
    }

    // Redirection à la page précédente
    if($this->previousUrl())
      header("Location: " . $this->previousUrl());
  }

  /**
   * @param    $idBiere Identifiant de la biere
   * @return boolean          Vrai si l'utilisateur n'a pas encore voté pour $idBiere
   */
  function hasAlreadyVoted( $idBiere ) {
    if(isset($_SESSION['votes']) && is_array($_SESSION['votes']) && in_array($idBiere, $_SESSION['votes'])) {
      return true;
    } else {
      return false;
    }
  }

  /**
   * [ajouterVoteALaSession description]
   * @param  [type] $idBiere Identifiant de la bière
   */
  function ajouterVoteALaSession( $idBiere ) {
    if(isset($_SESSION['votes']) && is_array($_SESSION['votes'])) {
      array_push($_SESSION['votes'], $idBiere);
    } elseif( !isset($_SESSION['votes']) || !is_array($_SESSION['votes'])){
      $_SESSION['votes'] = array($idBiere);
    }
  }

}
?>